import time
import unittest
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service


class UnittestFireFoxDriver(unittest.TestCase):
    """
        driver 代表的是 浏览器 驱动对象
    """
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        cls.service = Service(executable_path='../day01/driver_exe/geckodriver.exe')
        cls.driver = webdriver.Firefox(service=cls.service)

    def test_element_8(self):
        """八大元素定位方式 : 5种"""
        self.driver.get('file:///D:/SoftWare/testhtml/exam/index.html')

        # 1、 通过  xpath 的 表达式 来定位 所需要操作的 元素
        self.driver.find_element(By.XPATH, "//a[@href='House.html']").click()
        # 断言的使用  预期值  和 实际值 是否一致  如果一致 通过 不然 失败
        exp = '房源注册'
        # 想要获得 网页的标题名
        act = self.driver.title
        self.assertEqual(exp, act)

        time.sleep(2)
        # 返回
        self.driver.back()
        time.sleep(2)
        # 2、 通过 css 的方式 来定位 想要 操作的 元素
        self.driver.find_element(By.CSS_SELECTOR, "a[href='House.html']").click()

        time.sleep(2)
        # 返回
        self.driver.back()
        time.sleep(2)
        # 3、 精确定位 ，通过 LINK_TEXT 文本值来定位  ，定位的是 网页中 的某一段固定的 精确的文本值
        self.driver.find_element(By.LINK_TEXT, '继续提供房源信息').click()

        time.sleep(2)
        # 返回
        self.driver.back()
        time.sleep(2)
        # 4、 模糊搜索定位 ，通过 PARTIAL_LINK_TEXT 文本值来定位  ，定位的是 网页中 的某一段文本值
        self.driver.find_element(By.PARTIAL_LINK_TEXT, '继续提供房').click()

        time.sleep(2)
        # 返回
        self.driver.back()
        time.sleep(2)
        # 5、 通过 网页中 元素的 标签名来进行元素 定位   需要定位的元素的标签 在网页中要尽可能的 少一点
        self.driver.find_element(By.TAG_NAME, 'a').click()

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close()
        # cls.driver.quit()
        pass


if __name__ == '__main__':
    pass
